#!/usr/bin/env python3
"""
紧急修复数据库配置脚本
"""

import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()


def check_database_config():
    """检查数据库配置"""
    print("检查数据库配置...")

    # 检查环境变量
    db_url = os.environ.get('DATABASE_URL')
    dev_db_url = os.environ.get('DEV_DATABASE_URL')

    print(f"DATABASE_URL: {db_url}")
    print(f"DEV_DATABASE_URL: {dev_db_url}")

    if not db_url and not dev_db_url:
        print("❌ 没有找到数据库连接字符串环境变量")
        return False

    return True


def create_env_file():
    """创建或更新 .env 文件"""
    env_file = '.env'
    default_config = """# Flask 配置
FLASK_APP=manage.py
FLASK_ENV=development
SECRET_KEY=your-secret-key-change-in-production

# 数据库配置 - 开发环境 (SQLite)
DEV_DATABASE_URL=sqlite:///app/app-dev.db

# 数据库配置 - 生产环境 (MySQL)
# DATABASE_URL=mysql+pymysql://username:password@localhost/string_generator?charset=utf8mb4
"""

    if not os.path.exists(env_file):
        print("创建 .env 文件...")
        with open(env_file, 'w') as f:
            f.write(default_config)
        print("✅ .env 文件已创建")
    else:
        print("✅ .env 文件已存在")

    return env_file


def test_database_connection():
    """测试数据库连接"""
    try:
        from app import create_app
        from app.extensions import db

        app = create_app()

        with app.app_context():
            # 测试数据库连接
            db.engine.connect()
            print("✅ 数据库连接成功!")

            # 检查表是否存在
            from app.models.str_util_models import GenerationHistory
            inspector = db.inspect(db.engine)
            tables = inspector.get_table_names()

            if 'generation_history' in tables:
                print("✅ 数据库表已存在")
            else:
                print("⚠️  数据库表不存在，需要初始化")

        return True

    except Exception as e:
        print(f"❌ 数据库连接测试失败: {e}")
        return False


def main():
    """主函数"""
    print("=" * 50)
    print("数据库配置修复工具")
    print("=" * 50)

    # 步骤 1: 检查环境变量
    if not check_database_config():
        print("\n尝试修复配置...")
        create_env_file()
        # 重新加载环境变量
        load_dotenv(override=True)
        check_database_config()

    # 步骤 2: 测试数据库连接
    print("\n测试数据库连接...")
    if test_database_connection():
        print("\n✅ 数据库配置正常")
    else:
        print("\n❌ 数据库配置有问题，请检查以下项目:")
        print("1. 确保 .env 文件存在并包含数据库配置")
        print("2. 确保数据库服务正在运行")
        print("3. 确保数据库连接字符串正确")
        print("4. 运行 'flask init-db' 初始化数据库")

        # 尝试初始化数据库
        try:
            print("\n尝试初始化数据库...")
            from app import create_app
            from app.extensions import db

            app = create_app()
            with app.app_context():
                db.create_all()
                print("✅ 数据库初始化成功!")
        except Exception as e:
            print(f"❌ 数据库初始化失败: {e}")


if __name__ == '__main__':
    main()